#include"manager_gl.h"

int cnt_logistics_yz; 
int cnt_user_yz;

//输入管理员密码//成功输出1，失败输出0
bool manager_up_password(void)
{
	char password_[7];
	int cnt_try_manager=0;     
	while(1)
	{
		printf("请输入密码：");
		get_passwd(password_,sizeof(password_));         
		if(0 == strcmp(password_,manager.password))
		{
			return true;
		}
		if(3 == cnt_try_manager++)
		{                            
			return false;
        }
		printf("你输入的密码错误，您还有%d次机会，请重新输入",4-cnt_try_manager);
	}
}

//VIP用户注册
void user_enroll(void)
{
	if(cnt_user >= USER_MAX)
	{
		show_msg("注册的VIP用户数量已满，注册失败!",0.7);
		return;
	}
   
	printf("请输入用户名:");
	get_str(user[cnt_user].id,sizeof(user[cnt_user].id));

	
	if(0<=user_id_query(user[cnt_user].id))
	{
		show_msg("该用户名已经存在，不能添加!",0.7);
		return;
	}

	
	while(1)
    {
		printf("请设置密码：");
		get_passwd(user[cnt_user].password,sizeof(user[cnt_user].password));

	    char repassword[7];
	    printf("请再次输入密码：");
	    get_passwd(repassword,sizeof(repassword));

	    if(0==strcmp(user[cnt_user].password,repassword))
    	{
	    	break;
    	}
        printf("两次输入密码不符，注册失败！请重新输入\n\n\n");
	}

	printf("请输入用于找回密码的手机号：");
	get_str(user[cnt_user].phone,sizeof(user[cnt_user].phone));

	cnt_user++;
	show_msg("VIP注册成功!",0.7);
}

// 用户登录，修改VIP用户信息
void vip_find()
{
    User find_;
    //查找VIP，提供退出按钮。

    //找到了退出循环，下标记在cnt_user_yz中。
    printf("请输入会员id:"); 
    get_str(find_.id,sizeof(find_.id));
    cnt_user_yz=user_id_query(find_.id);
    while(-1==cnt_user_yz)
    {     
        printf("未找到VIP!\n");
        show_msg("(按1退出，按2继续登录)",0.7); 
        switch(get_cmd('1','2'))
        {
           case '1':return;
           case '2':break;
        } 
        printf("请输入会员id:"); 
        get_str(find_.id,sizeof(find_.id));
        cnt_user_yz=user_id_query(find_.id);   
    }
    
    printf("请输入密码：");
    get_passwd(find_.password,sizeof(find_.password));
    while(0!=strcmp(user[cnt_user_yz].password,find_.password))
    {
       printf("密码错误！\n");
       show_msg("(按1退出，按2继续登录)",0.7); 
       switch(get_cmd('1','2'))
       {
           case '1':return;
           case '2':break;
       }
       printf("请输入密码：");
       get_passwd(find_.password,sizeof(find_.password));
    }
   
    //修改用户信息。
    change_user(); 
}


//删除VIP用户
void user_delete(void)
{
	user[cnt_user_yz]=user[--cnt_user];
	show_msg("用户注销成功",0.7);
	anykey_continue();
}

//修改姓名
void user_modify_name(void)  
{
   char new_id[11];
   int cnt_new_id=0;
   printf("请输入新的姓名：");
   get_str(new_id,sizeof(new_id));
   cnt_new_id=user_id_query(new_id);
   while(0 <= cnt_new_id)
   {
      printf("VIP名已存在，请重新输入!\n");
      show_msg("(按1退出，按2继续登录)",0.7); 
      switch(get_cmd('1','2'))
      {
         case '1':return;
         case '2':break;
      } 
      printf("请输入新的姓名：");
      get_str(new_id,sizeof(new_id));
      cnt_new_id=user_id_query(new_id);
   }
   strcpy(user[cnt_user_yz].id,new_id);
   printf("修改成功！\n");
   anykey_continue(); 
   
}

//修改密码
void user_modify_password(void)
{
 	char password[7];
	printf("请输入旧密码:");
	get_passwd(password,sizeof(password));

	if(strcmp(password,user[cnt_user_yz].password))
	{
		show_msg("旧密码错误，无法修改!",0.7);
		return;
	}
	printf("输入新密码:");
	get_passwd(password,sizeof(password));

	char repassword[7];
	printf("请确认新密码:");
	get_passwd(repassword,sizeof(repassword));

	if(0==strcmp(password,repassword))
	{
		strcpy(user[cnt_user_yz].password,password);
		show_msg("修改密码成功!",0.7);
    }
	else
	{
		show_msg("两次输入密码不符，修改失败！",0.7);
	}
}

//修改电话号码
void user_modify_phone(void)
{
	printf("请输入新的电话：");
    get_str(user[cnt_user_yz].phone,sizeof(user[cnt_user_yz].phone));
	anykey_continue();
}

//积分兑换商品。
void user_modify_vip(void)
{
   int l;
   printf("请输入要兑换的积分数量：");
   scanf("%d",&l);
   if(user[cnt_user_yz].vip<l)
   {
	   show_msg("积分数量少于兑换积分,兑换失败!",2);
       return;
   }
   user[cnt_user_yz].vip-=l;
   show_msg("兑换成功!",0.75);
   anykey_continue();
}

//显示修改VIP用户信息界面
void show_change_user(void)
{
	system("clear");
    puts("******************");
	printf("用户名  :%s  \n电话号码:%s \n积分    :%d\n\n",
             user[cnt_user_yz].id,
             user[cnt_user_yz].phone,
             user[cnt_user_yz].vip);
	puts("1、删除VIP用户");
	puts("2、修改VIP姓名");
	puts("3、修改VIP密码");
	puts("4、修改电话号码");
    puts("5、积分兑换商品");
	puts("0、返回上一界面");   
}


//修改VIP用户信息 
void change_user(void)
{
	while(1)
    {            
		show_change_user();
		switch(get_cmd('0','5'))
		{
			case '1':user_delete();return;          //删除VIP用户
			case '2':user_modify_name();break;      //修改姓名
			case '3':user_modify_password();break;  //修改密码
			case '4':user_modify_phone();break;     //修改电话号码   
            case '5':user_modify_vip() ;break;      //积分兑换商品。       
			case '0':return ;
		}
    }
}

//重置密码
void password_find(void)
{
    User find_;
    int Reset;
	char tmp[7]="000000";

    printf("请输入会员id:"); 
    get_str(find_.id,sizeof(find_.id));
    Reset=user_id_query(find_.id); 
    while(-1==Reset)
    {     
        printf("未找到VIP!\n");
        show_msg("(按1退出，按2继续登录)",0.7); 
        switch(get_cmd('1','2'))
        {
           case '1':return;
           case '2':break;
        } 
        printf("请输入会员id:"); 
        get_str(find_.id,sizeof(find_.id));
        Reset=user_id_query(find_.id);   
    }
    
   
    printf("请输入电话：");
    get_str(find_.phone,sizeof(find_.phone));
    while(0!=strcmp(user[Reset].phone,find_.phone))
    {
        printf("验证电话错误！\n");
        show_msg("(按1退出，按2继续验证电话)",0.7);
		printf("\n");
        switch(get_cmd('1','2'))
        {
			case'1':return;
            case'2':break;
        }
        printf("请输入电话：");
        get_str(find_.phone,sizeof(find_.phone));
    }
    show_msg("(重置密码成功！)",1);
    strcpy(user[Reset].password,tmp);
}

//遍历vip用户
void vip_show_all(void)
{
	if(0 == cnt_user)
	{
		show_msg("当前无vip用户!",0.75);
		return;
	}

	for(int i=0; i<cnt_user; i++)
	{
		printf("用户名:%s\t电话号码:%s\t   积分:%d\t",
                user[i].id,
                user[i].phone,
                user[i].vip);
        printf("\n");
	}

	anykey_continue();
}
//vip信息界面菜单
void show_vip_ml(void)
{
	system("clear");
	printf("　VIP用户信息管理\n");
    puts("******************");
	puts("1、用户注册");
	puts("2、用户登录");
    puts("3、查看所有用户");
    puts("4、重置密码");
	puts("0、返回上一界面");
}


//管理员vip信息界面。
void vip_ml(void)
{
	for(;;)
	{
		show_vip_ml();
		switch(get_cmd('0','4'))
		{
			case '1':user_enroll();break; //用户注册
			case '2':vip_find();break;     //用户登录
            case '3':vip_show_all();break; //查看所有用户
            case '4':password_find();break;//重置密码
			case '0':return ;
		}
	}
}

//后勤人员注册
void logistics_enroll(void)
{
	if(cnt_logistics >= LOGISTICS_MAX)
	{
		show_msg("注册的后勤人数已满，注册失败!",0.7);
		return;
	}
    //输入用户名
	printf("请输入用户名:");
	get_str(logistics[cnt_logistics].id,sizeof(logistics[cnt_logistics].id));
	while(0<=logistics_id_query(logistics[cnt_logistics].id))	
    {
        show_msg("该用户名已经存在，不能添加!",0.7);     
	    return; 
    }

	printf("请设置密码：");
	get_passwd(logistics[cnt_logistics].password,sizeof(logistics[cnt_logistics].password));
		
	char repassword[7];
    printf("请再次输入密码：");
    get_passwd(repassword,sizeof(repassword));
    while(strcmp(logistics[cnt_logistics].password,repassword))
    {
        printf("两次输入密码不符，注册失败！请重新输入\n\n\n");
        printf("请设置密码：");
		get_passwd(logistics[cnt_logistics].password,sizeof(logistics[cnt_logistics].password));
		
		
    	printf("请再次输入密码：");
     	get_passwd(repassword,sizeof(repassword));
    }
    	
	printf("请输入用于找回密码的手机号：");
	get_str(logistics[cnt_logistics].phone,sizeof(logistics[cnt_logistics].phone));

	cnt_logistics++;
	show_msg("后勤人员注册成功!",0.7);
    logistics[cnt_logistics].working=true;
}

//删除后勤人员
void logistics_delete(void)
{
	logistics[cnt_logistics_yz]=logistics[--cnt_logistics];
	show_msg("用户注销成功！",0.7);
}

//修改姓名
void logistics_modify_name(void)  
{
   char new_id[11];
   int cnt_new_id=0;
   printf("请输入新的姓名：");
   get_str(new_id,sizeof(new_id));
   cnt_new_id=logistics_id_query(new_id);
   while(0 <= cnt_new_id)
   {
      printf("该后勤名已存在，请重新输入!\n");
      show_msg("(按1退出，按2继续登录)",0.7); 
      switch(get_cmd('1','2'))
      {
         case '1':return;
         case '2':break;
      } 
      printf("请输入新的姓名：");
      get_str(new_id,sizeof(new_id));
      cnt_new_id=logistics_id_query(new_id);
   }
   strcpy(logistics[cnt_logistics_yz].id,new_id);
   printf("修改成功！\n");
   anykey_continue(); 
}

//修改密码
void logistics_modify_password(void)
{
	char password[7];
	printf("请输入旧密码:");
	get_passwd(password,sizeof(password));

	if(strcmp(password,logistics[cnt_logistics_yz].password))
	{
		show_msg("旧密码错误，无法修改!",0.7);
		return;
	}
       
	printf("输入新密码:");
	get_passwd(password,sizeof(password));

	char repassword[7];
	printf("请确认新密码:");
	get_passwd(repassword,sizeof(repassword));

	if(0==strcmp(password,repassword))
	{
		strcpy(logistics[cnt_logistics_yz].password,password);
		show_msg("修改密码成功!",0.7);
    }
	else
	{
		show_msg("两次输入的密码不符，修改失败!",0.7);
	}
}

//修改电话号码
void logistics_modify_phone(void)
{
	printf("请输入用户电话：");
    get_str(logistics[cnt_logistics_yz].phone,sizeof(logistics[cnt_logistics_yz].phone));
	show_msg("修改成功！",0.7);
}

//显示修改后勤人员信息界面
void show_change_logistics(void)
{
	system("clear");
	puts("******************");
    printf("姓名：%s\n电话：%s\n\n",
             logistics[cnt_logistics_yz].id,
             logistics[cnt_logistics_yz].phone);
	puts("1、人员注销");
	puts("2、修改姓名");
	puts("3、修改密码");
	puts("4、修改号码");
	puts("0、按0返回");   
}
//修改后勤人员信息 
void change_logistics(void)
{
	while(1)
    {            
		show_change_logistics();
                
		switch(get_cmd('0','4'))
		{
			case '1':logistics_delete();return;          //删除后勤人员
			case '2':logistics_modify_name();break;      //修改姓名
			case '3':logistics_modify_password();break;  //修改密码
			case '4':logistics_modify_phone();break;     //修改电话号码           
			case '0':return ;
		}
    }
}



//登录修改某一后勤人员信息
void rear_hq_find()
{
   	char password[7];
    Logistics find_;
    //登录后勤人员，提供退出按钮。

    printf("请输入后勤人员id:"); 
    get_str(find_.id,sizeof(find_.id));
    cnt_logistics_yz=logistics_id_query(find_.id); 
    while(-1 == cnt_logistics_yz)
    {
       printf("该后勤人员未注册！\n");
       show_msg("(按1退出，按2继续登录)",0.7); 
	   switch(get_cmd('1','2'))   
	   {
		   case '1':return;
		   case '2':break;
	   }
       printf("请输入后勤人员id:"); 
       get_str(find_.id,sizeof(find_.id));
       cnt_logistics_yz=logistics_id_query(find_.id);
    }


    printf("请输入密码：");
    get_passwd(password,sizeof(password));
    while(strcmp(logistics[cnt_logistics_yz].password,password))
    {
        printf("密码错误！\n");
        show_msg("(按1退出，按2继续登录)",0.7); 
        switch(get_cmd('1','2'))      
        {
           case '1':return;
           case '2':break;
        }
        printf("请输入密码：");
        get_passwd(password,sizeof(password));
    }
    
    //后勤人员信息修改
    change_logistics();
}    

//遍历后勤人员
void logistics_show_all(void)
{
	if(0 == cnt_logistics)
	{
		show_msg("当前无后勤人员!",0.75);
		return;
	}

	for(int i=0; i<cnt_logistics; i++)
	{
		printf("用户名:%s    电话号码:%s  %s ",
                 logistics[i].id,                 
                 logistics[i].phone,
        	logistics[i].working?"在职":"离职");
	}

	anykey_continue();
}

//重置密码
void logistics_reset_password(void)
{
    Logistics find_;
    int Reset;     //记录重置下标
	char tmp[7]="000000";

    printf("请输入后勤人员id:"); 
    get_str(find_.id,sizeof(find_.id));
    Reset=logistics_id_query(find_.id); 
    while(-1==Reset)
    {     
        printf("未找到该后勤人员!\n");
        show_msg("(按1退出，按2继续登录)",0.7); 
        switch(get_cmd('1','2'))
        {
           case '1':return;
           case '2':break;
        } 
        printf("请输入后勤人员id:"); 
        get_str(find_.id,sizeof(find_.id));
        Reset=logistics_id_query(find_.id);   
    }
    
    //在职的情况下，只有电话短信验证才可以更改，离职之后管理员只需要id就可以直接重置该账号。
    if(logistics[Reset].working)
	{
	    printf("请输入电话：");
	    get_str(find_.phone,sizeof(find_.phone));
	    while(0!=strcmp(logistics[Reset].phone,find_.phone))
	    {
	        printf("验证电话错误！\n");
	        show_msg("(按1退出，按2继续验证电话)",0.7);
			printf("\n");
	        switch(get_cmd('1','2'))
	        {
				case'1':return;
	            case'2':break;
	        }
	        printf("请输入电话：");
	        get_str(find_.phone,sizeof(find_.phone));
	    }
	    show_msg("(重置密码成功！)",1);
	    strcpy(logistics[Reset].password,tmp);
        return;
	}
    show_msg("(该人员已离职，重置密码成功！)",1);
	strcpy(logistics[Reset].password,tmp);
}

//后勤人员信息菜单
void show_rear_hq_ml(void)
{
	system("clear");
    puts("　后勤人员信息管理");
	puts("******************");
	puts("1、后勤人员注册");
	puts("2、后勤人员登录");
    puts("3、查看所有人员");
    puts("4、重置后勤人员密码");
	puts("0、返回上一界面");
}

//管理后勤人员信息界面。
void rear_hq_ml(void)
{
	for(;;)
	{
		show_rear_hq_ml();
		switch(get_cmd('0','4'))
		{
			case '1':logistics_enroll();break;    //后勤人员注册
			case '2':rear_hq_find();break;        //查找修改某一后勤人员信息
            case '3':logistics_show_all();break;  //查看所有后勤人员
			case '4':logistics_reset_password();break;//重置密码
	    	case '0':return;
		}
	}
}

//更改收款账号。
void charge_ml(void)
{
	printf("请输入新的账号：");
    get_str(manager.number,sizeof(manager.number));
    printf("修改成功!\n");
    anykey_continue();
}

//查看日志,一次十条。上下键翻页。
void see_journal(void)
{
	int see_journal_cnt=0; 
    double turnover[3]={0,0,0};   //营业额,年月日。
	time_t t;
	struct tm *time_new;
	time(&t);
	time_new=gmtime(&t);

    //营业额
	for(int i=0;i<cnt_time;i++)
	{
		if(pay[i].year==time_new->tm_year)
			turnover[0]+=pay[i].money;
		if(pay[i].mon==time_new->tm_mon)
			turnover[1]+=pay[i].money;
		if(pay[i].day==time_new->tm_mday)
			turnover[2]+=pay[i].money;
	}

	while(1)
	{
		system("clear");		
		printf("===========================================\n");
		for(int i=0;i<10;i++)
		{
			if((i+see_journal_cnt*10)>=cnt_time)
			{
				break;
			}
			printf("%-2.d.%d年%.2d月%.2d日 %.2d:%.2d:%.2d    %s 支付给 %s 共 %.3lf 元\n",i+1,
                   pay[i+see_journal_cnt*10].year+1900,
                   pay[i+see_journal_cnt*10].mon+1,
                   pay[i+see_journal_cnt*10].day,
                   pay[i+see_journal_cnt*10].hour+8,
                   pay[i+see_journal_cnt*10].min,
                   pay[i+see_journal_cnt*10].sec,
                   pay[i+see_journal_cnt*10].pay_phone,
                   pay[i+see_journal_cnt*10].collection_phone,
                   pay[i+see_journal_cnt*10].money);                        
		}
                   
        printf("===========================================");
		printf("第%d页\n",see_journal_cnt+1);
		printf("退出请按空格\n上下键翻页\n\n\n");
		printf("今年营业额：%.3lf元\n本月营业额：%.3lf元\n今日营业额：%.3lf元\n",
                  turnover[0],
                  turnover[1],
                  turnover[2]);
        switch(getch())
        {
			//空格
            case(32):return;
			//上键183
			case(183):
                      if(see_journal_cnt>0)
			          {
				         see_journal_cnt--;	
			          }
                      break;
            //下键184
			case(184):
			          if((see_journal_cnt+1)*10<cnt_time)
			          {
			  	         see_journal_cnt++;
			          }
                      break;
        }
	}
}

//登录界面显示
void show_manager_gl_ml(void)
{
	system("clear");
	puts("   管理员界面");
	puts("******************");
	puts("1、VIP用户管理");
	puts("2、后勤人员管理");
	puts("3、更改收款帐号");
	puts("4、查看收款记录");
	puts("0、返回上一界面");
}

//管理员主目录界面
void manager_gl_ml(void)
{   
    if(false == manager_up_password())
    {                       
	    return;
    }
    for(;;)
    {
		show_manager_gl_ml();
		switch(get_cmd('0','4'))
		{
            case '1': vip_ml(); break;        //管理vip信息界面。
            case '2': rear_hq_ml(); break;    //管理后勤人员信息界面。
            case '3': charge_ml(); break;     //更改收款账号。
			case '4': see_journal();break;    //查看日志
            case '0': return ;
        }
    }
}
